package org.raymond.iworks.study.netty.official.fundamental.time;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

import java.util.Date;

/**
 * @author raymond
 * @version V1.0
 * @Description: TODO
 */

/**
 *     在基于流的传输(如TCP/IP)中,接收到的数据存储在套接字接收缓冲区中.不幸的是,基于流的传输的缓冲区不是数据包队列,而是字节队列.
 * 这意味着,即使您将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是将它们视为一堆字节.
 * 因此,不能保证您所读的内容就是远程对端所写的内容.
 *     因此,对于接收方,无论是服务器端还是客户端,都应该将接收到的数据整理成一个或多个有意义的帧,这些帧可以被应用程序逻辑轻松理解.
 */
public class TimeClientHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf m = (ByteBuf) msg; // (1)
        try {
            long currentTimeMillis = (m.readUnsignedInt() - 2208988800L) * 1000L;
            System.out.println(new Date(currentTimeMillis));
            ctx.close();
        } finally {
            m.release();
        }
    }
}
